package spring.cloud.service.task.dto;

import com.alibaba.fastjson2.JSONObject;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;

@Slf4j
@Setter
@Getter
public class TaskDto {
    private long updateVersion;//这个只是版本配置的版本，和启用禁用等其他操作无关
    private Long id;//添加任务的时候为null，之后都不为空
    private String createBy;
    private Date createTime;
    private String lastUpdateBy;
    private Date lastUpdateTime;
    //

    private String description;
    private String namespaceKey;
    private String namespaceDescription;//【该字段只是显示】
    private String taskType;
    private String xid;
    private String taskId;
    private String taskLevel;//任务级别A级别最高 B中间 C级别最低。当资源紧张时C级别的任务不跑，B级别按照资源情况判断是否需要跑。A无论资源情况怎样都要跑。
    //
    /**
     * status代表启用和禁用 enable配置则代表是否任务进行调度。
     * 如果在启用的情况下可以进行调度。如果在禁用的情况下则不能进行调度。
     */
    private String status;
    private boolean statusFlag;//【该字段只是显示】
    private String preferExecutorIdList;
    //
    private long fireDateTimeVersion;//如果和历史对比发生改变就生成一个新的。
    private String cronExpression;
    private String pausePeriodDate;
    private String pausePeriodTime;
    private int preAllotMinutes;
    private int timeoutMinutes;
    private int timeoutAlarmMinutes;
    //
    private String taskProperties;
    private String taskDataRangeRule;
    private String taskItemInfo;


    public static TaskDto parse(JSONObject jsonObject) {
        TaskDto taskDto = new TaskDto();
        String id = jsonObject.getString("id");
        if (id != null) {
            taskDto.setId(Long.parseLong(id));
        }
        taskDto.setDescription(jsonObject.getString("description"));
        taskDto.setNamespaceKey(jsonObject.getString("namespaceKey"));
        taskDto.setTaskType(jsonObject.getString("taskType"));
        String taskType = taskDto.taskType;
        taskDto.setXid(jsonObject.getString("xid"));
        taskDto.setTaskId(jsonObject.getString("taskId"));
        taskDto.setTaskLevel(jsonObject.getString("taskLevel"));
        //
        taskDto.setStatus(jsonObject.getString("status"));
        taskDto.setPreferExecutorIdList(jsonObject.getString("preferExecutorIdList"));
        //
        taskDto.setCronExpression(jsonObject.getString("cronExpression"));
        taskDto.setPreAllotMinutes(Integer.parseInt(jsonObject.getString("preAllotMinutes")));//提前进行预分配时间-单位分钟
        String pausePeriodDate = jsonObject.getString("pausePeriodDate");
        String pausePeriodTime = jsonObject.getString("pausePeriodTime");
        taskDto.setPausePeriodDate(StringUtils.trimToNull(pausePeriodDate));
        taskDto.setPausePeriodTime(StringUtils.trimToNull(pausePeriodTime));
        //
        taskDto.setTimeoutMinutes(Integer.parseInt(jsonObject.getString("timeoutMinutes")));
        taskDto.setTimeoutAlarmMinutes(Integer.parseInt(jsonObject.getString("timeoutAlarmMinutes")));
        //
        taskDto.setTaskProperties(jsonObject.getString("taskProperties"));
        taskDto.setTaskDataRangeRule(jsonObject.getString("taskDataRangeRule"));
        taskDto.setTaskItemInfo(jsonObject.getString("taskItemInfo"));
        return taskDto;
    }

}
